package model.wrap.content;

import java.util.ArrayList;

import controllers.routes;

import model.wrap.node.Node;
import model.wrap.type.ByteElement;
import model.wrap.type.FloatElement;
import model.wrap.type.PointElement;
import model.wrap.type.StringElement;
import model.wrap.type.Type;

public class Content
{
    private ArrayList<String> types;
    private ArrayList<String> ids;
    private ArrayList<String> titles;
    
    public Content(Node node)
    {
	types = node.getType().getSimpleTypesName();
	ids = node.getContentsId();
	titles = node.getType().getSimpleTypesTitle();
    }
    
    public int getSize()
    {
	return this.types.size();
    }
    
    public String getSimpleType(int index)
    {
	if(this.types.get(index).equals(Type.BYTE))
	    return "Файл";
	if(this.types.get(index).equals(Type.STRING))
	    return "Строка";
	if(this.types.get(index).equals(Type.FLOAT))
	    return "Число";
	if(this.types.get(index).equals(Type.POINT))
	    return "Ссылка";
	if(this.types.get(index).equals(Type.USER))
	    return "Пользователь";
	return "";
    }
    
    public String getTitle(int index)
    {
	return this.titles.get(index);
    }
    
    public String getContentToString(int index)
    {
	if(this.types.get(index).equals(Type.BYTE))
	    return this.getByteContent(index);
	if(this.types.get(index).equals(Type.STRING))
	    return this.getStringContent(index);
	if(this.types.get(index).equals(Type.FLOAT))
	    return this.getFloatContent(index);
	if(this.types.get(index).equals(Type.POINT))
	    return "";//this.getPointContent(index);
	if(this.types.get(index).equals(Type.USER))
	    return "Пользователь";
	return "";
    }
    
    private String getStringContent(int index)
    {
	StringElement element = new StringElement(Long.valueOf(this.ids.get(index)));
	return element.getContent();
    }
    
    private String getFloatContent(int index)
    {
	FloatElement floatElement = new FloatElement(Long.valueOf(this.ids.get(index)));
	return String.valueOf(floatElement.getContent());
    }
    
    private String getByteContent(int index)
    {
	ByteElement byteElement = new ByteElement(Long.valueOf(this.ids.get(index)));
	return byteElement.getFileName()+"("+byteElement.getContentType()+")";
    }
    
    private String getPointContent(int index)
    {
	PointElement pointElement = new PointElement(Long.valueOf(this.ids.get(index)));
	return "<a href=\""+routes.Hierarchy.node(pointElement.getContentNode().getId(), 0)+"\">"+pointElement.getContentNode().getTitle()+"</a>";
    }
    
    public Long getContentId(int index)
    {
	return Long.valueOf(this.ids.get(index));
    }    
    
    public boolean isByte(int index)
    {
	return this.types.get(index).equals(Type.BYTE);
    }
}
